//package goroutine
//
//import (
//
//)
//
////新建一个协程处理业务，处理Panic，防止进程因panic而退出
//func WithGo(process func(), desc ...interface{}) {
//	go func() {
//		defer func() {
//			if err := recover(); err != nil {
//				log.Error("go %v error: %v ", desc, err)
//				util.PrintPanicStack()
//			}
//			//关闭数据库会话
//			db.ClearSession()
//			routinelocal.RoutineLocalFactory().ClearCurrent()
//		}()
//
//		if len(desc) > 0 {
//			log.Infof("go start: ", desc)
//		}
//		process()
//		if len(desc) > 0 {
//			log.Infof("go end: ", desc)
//		}
//	}()
//}
//
////安全调用函数：处理Panic，防止进程因panic而退出
//func RecoveryCall(process func(), errHandlers ...func(err interface{})) {
//	defer func() {
//		if err := recover(); err != nil {
//			errorInfo, ok := err.(error)
//			if ok {
//				log.Errorf("RecoveryCall error: %s", errorInfo.Error())
//			}
//			util.PrintPanicStack()
//			if len(errHandlers) > 0 {
//				for i := 0; i < len(errHandlers); i++ {
//					errHandlers[i](err)
//				}
//			}
//		}
//	}()
//	process()
//}
//
////包装函数：处理Panic，防止进程因panic而退出
//func RecoveryWrapper(process func(), errHandlers ...func(err interface{})) func() {
//	wrapperFun := func() {
//		defer func() {
//			if err := recover(); err != nil {
//				util.PrintPanicStack()
//				if len(errHandlers) > 0 {
//					for i := 0; i <= len(errHandlers); i++ {
//						errHandlers[i](err)
//					}
//				}
//			}
//		}()
//		process()
//	}
//	return wrapperFun
//}
